import subprocess
import sys
import os

"""
资源关系智能问答系统 - 安装和运行脚本
此脚本将帮助您安装所有必要的依赖并启动应用程序。
"""

def install_dependencies():
    """安装项目依赖"""
    print("正在安装项目依赖...")
    try:
        # 更新pip
        subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "pip"])
        # 安装requirements.txt中的所有依赖
        subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
        print("依赖安装成功！")
        return True
    except subprocess.CalledProcessError as e:
        print(f"依赖安装失败: {e}")
        return False

def check_env_file():
    """检查.env配置文件是否存在并包含必要的配置项"""
    if not os.path.exists('.env'):
        print("警告: 未找到.env配置文件。")
        # 创建一个示例.env文件
        with open('.env', 'w', encoding='utf-8') as f:
            f.write("""# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=password
DB_NAME=resource_network

# Flask配置
FLASK_ENV=development
FLASK_DEBUG=True
FLASK_RUN_HOST=0.0.0.0
FLASK_RUN_PORT=5000

# 通义千问API配置
TONGYI_API_KEY=your_api_key_here
TONGYI_API_BASE_URL=https://api.dashscope.aliyuncs.com/compatible-mode/v1
""")
        print("已创建示例.env文件，请根据您的实际环境修改配置。")
        return False
    else:
        # 检查.env文件内容
        with open('.env', 'r', encoding='utf-8') as f:
            content = f.read()
            if 'DB_HOST' not in content or 'DB_USER' not in content:
                print("警告: .env文件中缺少必要的数据库配置项。")
                return False
            if 'TONGYI_API_KEY' not in content:
                print("警告: .env文件中缺少通义千问API密钥。")
                print("注意：应用程序可能无法提供完整功能。")
        return True

def run_app():
    """运行Flask应用"""
    print("\n正在启动Flask应用...")
    
    # 设置环境变量
    os.environ['FLASK_ENV'] = 'development'
    os.environ['FLASK_DEBUG'] = 'True'
    
    try:
        # 直接运行app.py文件，避免相对导入问题
        subprocess.run([sys.executable, "backend/app.py"])
    except KeyboardInterrupt:
        print("\n应用已停止。")
    except Exception as e:
        print(f"应用启动失败: {e}")

if __name__ == '__main__':
    print("===== 资源关系智能问答系统安装向导 ======")
    
    # 检查Python版本
    if sys.version_info < (3, 8):
        print("错误: 本系统需要Python 3.8或更高版本。")
        sys.exit(1)
    
    # 检查.env文件
    env_ok = check_env_file()
    if not env_ok:
        input("请修改.env文件后按Enter键继续...")
    
    # 安装依赖
    install_ok = install_dependencies()
    if not install_ok:
        print("依赖安装失败，无法继续。请手动安装依赖后再次尝试。")
        print("手动安装命令: python -m pip install -r requirements.txt")
        sys.exit(1)
    
    # 询问是否运行示例数据插入脚本
    insert_data = input("\n是否需要插入示例数据到数据库？(y/n): ").strip().lower()
    if insert_data == 'y':
        try:
            print("正在插入示例数据...")
            subprocess.check_call([sys.executable, "insert_sample_data.py"])
            print("示例数据插入成功！")
        except Exception as e:
            print(f"示例数据插入失败: {e}")
            print("您可以稍后手动运行: python insert_sample_data.py")
    
    # 运行应用
    print("\n准备启动应用...")
    run_app()